package cloud.lysky.java.on.redis.jedis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Pipeline;

/**
 * @author luoly
 * @describe
 * @date 2023-07-27 11:16
 **/
// Jedis访问Redis示例
public class JedisDemo {
    public static void main(String[] args) {
        // Redis连接池配置
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        // 设置最大连接数
        jedisPoolConfig.setMaxTotal(10);
        // 设置最大空闲连接数
        jedisPoolConfig.setMaxIdle(5);
        // 设置最小空闲连接数
        jedisPoolConfig.setMinIdle(3);

        // 创建Jedis连接池, 参数timeout既是连接超时又是读写超时，从Jedis 2.8开始，开始区分connectTimout和socketTimeout构造函数
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, "192.168.101.104", 6379, 3000,null);
        Jedis jedis = null;
        try {
            // 从连接池中获取Jedis对象
            jedis = jedisPool.getResource();
            // 设置数据
            System.out.println(jedis.set("name", "lysky"));
            // 获取数据
            System.out.println(jedis.get("name"));

            // 管道：一次发送多个命令，减少网络开销
            // 开启管道
            Pipeline pipelined = jedis.pipelined();
            // 比如自增操作
            for (int i = 0; i < 100; i++) {
                pipelined.incr("readcount");
            }
            // 执行命令
            System.out.println(pipelined.syncAndReturnAll());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
